/**
 * Target: 接口和类型别名的区别
 * 面试、笔试的时候比较常用
 * 1. 对象结构类型扩展情况下，interface 使用extends关键字，而type使用交叉类型&;
 * 2. 同名的interface会有声明合并(需要兼容原接口的结构) type名字重复了会报错;
 * 3. 不应该在接口中处理类型逻辑。
 */
/**
 * 接口和 索引签名（映射）所引发的问题
 * 改成interface 后 type A 中的类型变成了Params并不是具体的内容；
 * 1. 因为interface有声明合并的特性。就在这里interface 具体的类型还不知道。
 * 下面的为问题描述
 */
// type Params = {
//   id: string;
// };

interface Params {
  id: string;
}

let p: Params = { id: "1" };
type A = typeof p;

type MyRecord = {
  [key: string]: string;
  // age: number; // 报错的原因是： 值类型和上面的不匹配。
};

interface MyInterface {
  name: string;
}
type MyType = {
  name: string;
};
const example1: MyType = {
  name: "example",
};
const example2: MyInterface = {
  name: "example2",
};
let record: MyRecord = {};
record = example1;
// record = example2;
